【SpringBoot】POSTリクエストをマッピングする@PostMappingアノテーションを解説します | 您所在的位置:网站首页 › postman springboot › 【SpringBoot】POSTリクエストをマッピングする@PostMappingアノテーションを解説します |
こんにちは。たいら(@tairaengineer2)です。 転職を繰り返し現在4社経験している、10年目エンジニアです。 この記事では、 SpringBootでPOSTリクエストをマッピングできる@PostMappingアノテーションについて @PostMappingアノテーションとは @PostMappingアノテーションを使ったサンプルプログラムと、丁寧に解説していきます。 前提:実施している環境@PostMappingアノテーションとは@PostMappingアノテーションを解説するプログラムの概要Javaサンプルプログラム実行結果まとめ:@PostMappingアノテーションを使ってみよう! 前提:実施している環境この記事では、以下の環境で行っています。 OS Windows10 IntelliJ IDEAのエディション Community(無料版) IntelliJ IDEAのバージョン 2021.3.2 プロジェクト Gradle Project 言語 Java バージョン11 フレームワーク Spring Boot バージョン2.6.3Spring Bootを動かすためにIntelliJ IDEAを使っています。 IntelliJ IDEAのインストールとSpring Bootプロジェクトを新規作成するやり方はこちらの記事をご参考ください。 IntelliJ IDEAのインストール 【IntelliJ IDEA】インストールするやり方を解説します(Windows向け)Spring Bootプロジェクトを新規作成するやり方 【IntelliJ IDEA】Spring Initializrを使ってSpring Bootプロジェクトを新規作成するやり方を解説します この記事では C:\SpringBootSample 配下に「SpringSample」という名前のプロジェクトを作っています。 @PostMappingアノテーションとは@PostMappingアノテーションとは、POSTリクエストのみをURLとコントローラーのクラスまたはメソッドを紐づけることができるアノテーションです。 要は@PostMappingアノテーションは、@RequestMappingアノテーションのPOSTリクエスト用のアノテーションです。 @RequestMappingアノテーションについては、こちらの記事をご参考ください。 【SpringBoot】URLとクラスやメソッドをマッピングする@RequestMappingアノテーションを解説します@PostMappingアノテーションを使うためには Java 1 import org.springframework.web.bind.annotation.PostMapping;をインポートする必要があります。 @PostMappingアノテーションの使い方サンプルは以下になります。 1234 @PostMapping(value = "/sample")String sample(){ // 処理}
value属性は、メソッドやクラスに紐づけるURLのパスを指定する属性です。 1234 @PostMapping(value = "/sample")String sample(){ // 処理}だとPOSTリクエストの【http://localhost:8080/sample】というURLとsampleメソッドを紐づける、という意味です。 最初の「/」は省略してもOKです。 属性名の「value」は Java 1234 @PostMapping("/sample")String sample(){ // 処理}と、省略してもOKです。 また、value属性には複数のURLのパスを指定することもできます。 書き方は Java 1234 @PostMapping({"/test", "/sample"})String sample(){ // 処理}です。 この場合POSTリクエストの http://localhost:8080/sample http://localhost:8080/testのURLのパスとsampleメソッドを紐づけています。 @RequestMappingアノテーションだとあったmethod属性は、@PostMappingアノテーションにはありません。 では、次の章で実際に使ってみます。 @PostMappingアノテーションを解説するプログラムの概要@PostMappingアノテーションを解説するプログラムでは、 value属性にURLのパスを2つ指定したメソッドを1つ作成します。 value属性に指定したURLのパス2つともでアクセスできること GETでアクセスできないことを確認します。 解説で使うJavaプログラムは、 SpringSample\src\main\java\com\example\SpringSample 配下にある【SpringSampleApplication.java】を使います。 Javaサンプルプログラム Java 1234567891011121314151617181920 package com.example.SpringSample; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController; @SpringBootApplication@RestControllerpublic class SpringSampleApplication { public static void main(String[] args) { SpringApplication.run(SpringSampleApplication.class, args); } @PostMapping(value = {"/hello", "/world"}) String index(){ return "Hello World!"; }}実行結果 プロジェクトを実行するやり方は プログラムを右クリックして実行 実行タブから実行 ガターから実行の3種類あるので、いずれかで実行します。 詳しい解説は以下の記事をご参考ください。 【IntelliJ IDEA】SpringBootプロジェクトを実行するやり方を解説します今回、確認するにあたりPostmanというツールを使います。 Postmanの基本的な使い方については、こちらの記事をご参考ください。 【Postman】基本的な使い方を解説しますまず、「value属性に指定したURLのパス2つともでアクセスできること」を確認します。 【http://localhost:8080/hello】のURL、かつPOSTでリクエストを投げると、HTTPステータスが正常の200、 Hello World! が返されているので、アクセスできていることが確認できました。 【http://localhost:8080/world】のURL、かつPOSTでリクエストを投げると、こちらもHTTPステータスが200で Hello World! と同じレスポンスが返ってきているので、アクセスできていることが確認できました。 指定したものとは異なる【http://localhost:8080/aaa】のURL、かつPOSTでリクエストを投げると、HTTPステータスが404で 1234567 { "timestamp": "2022-03-15T08:46:47.329+00:00", "status": 404, "error": "Not Found", "message": "No message available", "path": "/aaa"}と、このURLは存在しないとエラーが返ってきているので、アノテーションで指定していないURLにはアクセスできていないことが確認できました。 2つ目の「GETでアクセスできないこと」を確認します。 【http://localhost:8080/hello】のURL、かつGETでリクエストを投げると、HTTPステータスが405で、 12345678 { "timestamp": "2022-03-15T08:48:46.890+00:00", "status": 405, "error": "Method Not Allowed", "trace": "org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:253)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:442)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:383)\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:125)\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:67)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:498)\r\n\tat org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1261)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1043)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:655)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:764)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\r\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n\tat java.base/java.lang.Thread.run(Thread.java:833)\r\n", "message": "Request method 'GET' not supported", "path": "/hello"}と、【HttpRequestMethodNotSupportedException】という特定のリクエストメソッドをサポートしていない場合にスローされる例外が返ってきています。 @PostMappingアノテーションだと、GETではアクセスすることができないことが確認できました。 まとめ:@PostMappingアノテーションを使ってみよう!以上がSpringBootのPOSTリクエストのURLとクラスやメソッドをマッピングする@PostMappingアノテーションについての解説でした! @PostMappingアノテーションと対をなす、GETリクエストを受け付ける@GetMappingアノテーションというものもあります。 詳しくはこちらの記事をご参考ください。 【SpringBoot】GETリクエストをマッピングする@GetMappingアノテーションを解説しますあなたのご参考になったのなら、とても嬉しいです(*´▽`*) ではでは~(・ω・)ノシ |
CopyRight 2018-2019 实验室设备网 版权所有 |